When a media stream, for example a VoIP (Voice over Internet Protocol) stream, is transmitted across a packet network, the stream is broken up into a plurality of packets. The packets often end up at their destination asynchronously (e.g. out of sequence or delayed) because not all packets follow the same route.
A jitter buffer (also known as a de-jitter buffer) may be used to hold several packets which have arrived asynchronously, so they can be played out synchronously. The larger the buffer (i.e. the longer the delay introduced by the buffer), the bigger the period which asynchronous packets have to arrive to be played out synchronously. This is often referred to as the size of the jitter buffer.
There are two standard ways to implement a jitter buffer—static and dynamic. The amount of delay introduced by a static jitter buffer is fixed and implemented by the manufacturer or configured during system initialization. A dynamic jitter buffer may be an adaptive device that adjusts (within manufactured or configured bounds) to accommodate recent network delay conditions. A dynamic jitter buffer has a range bounded by a lower limit and an upper limit (typically dictated by the amount of storage space available) between which the jitter buffer is able to be adjusted. The jitter buffer may employ an algorithm to determine the instantaneous amount of delay to insert so that packets can be played out synchronously. The jitter buffer adjustment algorithm uses recent packet arrival statistics to trade-off the risk of not having a packet to play out (starvation) against the consequences of introducing unnecessary, excess delay.
The process of adapting the instantaneous amount of delay introduced by the jitter buffer (i.e. the buffer size) may cause discontinuities in the play-out media stream. To adjust to a longer delay, the jitter buffer must play out silence or must replay information to fill the void. To adjust to a shorter delay, the jitter buffer has to discard some or all of the information in one or more packets. These discontinuities are disruptive to the synchronous play-out stream and may be annoying to the listener. Whenever possible, adjustments to the instantaneous size of the jitter buffer are made by lengthening or shortening silent periods.